<template>
  <div class="container">
    <van-nav-bar title="搜索中心" left-arrow @click-left="$router.back()" />
    <van-search v-model.trim="keyWord" placeholder="请输入搜索关键词" shape="round" @search="onSearch" />
    <!-- 关键词 -->
    <van-cell-group class="suggest-box" v-if="keyWord">
      <!-- span高亮联想关键词 -->
      <van-cell icon="search" v-for="item in suggestList" :key="item">
        <p v-html="item" @click="onSearch(item.replace(`<span>${keyWord}</span>`,keyWord))"></p>
      </van-cell>
    </van-cell-group>
    <!-- 历史记录 -->
    <div class="history-box" v-else>
      <div class="head">
        <span>历史记录</span>
        <!-- 删除全部历史记录 -->
        <van-icon name="delete" @click="delAllHistory"></van-icon>
      </div>
      <van-cell-group>
        <van-cell v-for="(item ,i) in historyList" :key="i">
          <a class="word_btn" @click="onSearch(item)">{{item}}</a>
          <!-- 删除 -->
          <van-icon class="close_btn" slot="right-icon" name="cross" @click="delHistory(i)" />
        </van-cell>
      </van-cell-group>
    </div>
  </div>
</template>

<script>
import { suggest } from '@/api/article.js'
/**
 * 搜索关键词
 * 补全机制：用户输入搜索关键词发生变化 ——> 调用后台接口 ——> 获取当前关键词补全列表
 */
/**
 * 搜索历史记录：
 * 1.把用户搜索记录存储到本地
 * 设计存储的数据结构：数组
 */
// 存储的key
const TT_SHISTORY = 'TT_SHISTORY'
// 造假数据
const historyList = ['小米', 'NTR', 'LSP']
// 存储假数据
localStorage.setItem(TT_SHISTORY, JSON.stringify(historyList))
export default {
  name: 'search-index',
  data () {
    return {
      keyWord: '',
      historyList: JSON.parse(localStorage.getItem(TT_SHISTORY)) || [],
      suggestList: []
    }
  },
  watch: {
    // 监控关键词
    keyWord () {
      // console.log(this.keyWord)
      // 函数防抖（业务：滚动条、搜索补全） 概念：设置延迟执行时间，规定时间内有再次执行，会被取消 ，重新计时。
      this.timer && clearTimeout(this.timer)
      // 存储定时器id ——> 存储到this上（没加入到data中不是响应式）
      this.timer = setTimeout(async () => {
        // console.log(this.keyWord)
        /**
         * 延迟执行的逻辑
         * 如果关键词为空，需要清空补全列表
         * 调用接口查询补全列表
         */
        if (!this.keyWord) {
          this.suggestList = []
          return
        }
        const { data } = await suggest(this.keyWord)
        // console.log(data)
        this.suggestList = data.options.map(sug => {
          return sug.toLowerCase().replace(this.keyWord, `<span>${this.keyWord}</span>`)
        })
        // console.log(this.suggestList)
      }, 800)
    }
  },
  methods: {
    onSearch (val) {
      /**
       * 跳转之前存储搜索历史记录 关键字 排重
       * 1、set结构
       * 2、判断在数组中是否存在
       */
      // if (!this.historyList.includes(val)) {
      //   this.historyList.unshift(val)
      //   this.updeteHistory()
      // }
      const arr = new Set()
      arr.add(val)
      this.historyList.unshift(...arr)
      this.updeteHistory()
      // 跳转到搜索结果页 ， 携带查询参数关i键词
      this.$router.push({ path: '/search/result', query: { q: val } })
    },
    // 更新本地存储
    updeteHistory () {
      // 本地删除
      localStorage.setItem(TT_SHISTORY, JSON.stringify(this.historyList))
    },
    // 删除某个搜索记录
    delHistory (i) {
      this.historyList.splice(i, 1)
      // 更新本地数据
      this.updeteHistory()
    },
    // 删除全部历史记录
    delAllHistory () {
      this.historyList = []
      this.updeteHistory()
    }
  }
}
</script>

<style scoped lang='less'>
.suggest-box {
  /deep/ .van-cell {
    padding: 10px 20px;
    color: #999;
    p {
      span {
        color: red;
      }
    }
  }
}
</style>
